/**
 *
 * 自定义分页插件
 *
 * */
// 全局的分页参数
var params = {};
// 所有的页码ID
var idArray = [];
// 固定的页码ID
var finalIdArray = ['previous', 'next', 'first', 'last'];

/**
 * 初始化渲染分页插件
 * @param paginationParams 分页组件的参数
 * @param callback 分页的回调,返回分页数据
 */
function paginationInit(paginationParams, callback) {
    // 存放分页div的Id标识，默认是pagination
    var id = paginationParams.id ? paginationParams.id : "pagination";
    // 显示页码的个数，默认是5
    var max = paginationParams.max ? paginationParams.max : 5;
    // 当前页数，默认是1
    var currentPage = paginationParams.currentPage ? paginationParams.currentPage : 1;
    // 总数据个数
    var total = paginationParams.total? paginationParams.total : 0;
    // 每页个数：默认是10
    var pageSize = paginationParams.pageSize ? paginationParams.pageSize : 10;
    // 总页数：
    var pageTotal = Math.floor((total + pageSize - 1) / pageSize);
    // 为参数设置页数
    params = paginationParams;
    params.pageTotal = pageTotal;
    params.currentPage = currentPage;
    idArray = ['previous', 'next', 'first', 'last'];
    var htmlCode = pageBuilder(total, pageTotal, currentPage, max);
    $("#" + id).html(htmlCode);

    clickRegister(idArray,callback);
}


/**
 * 解析页数
 * @param pageTotal 总页数
 * @param currentPgae 当前页数
 * @param maxShow  最大显示个数
 */
function pageBuilder(total, pageTotal, currentPgae, maxShow) {
    var pageHtml = " <ul class='pagination'>" +
        " <li><span>共&nbsp;<text style='color:black'>" + total + "</text>&nbsp;条</span></li>" +
        "</ul>";
    pageHtml += " <ul class='pagination'>" +
        "<li id='pagination-first'><a href='javascript:;'>首页</a></li>" +
        "<li id='pagination-previous'><a href='javascript:;'>上一页</a></li>";
    // 计算左边偏移量
    var indexLeft = 1 - (currentPgae - 2);
    if (indexLeft < 0) {
        pageHtml += "<li><a href='javascript:;'>...</a></li >";
    }
    // 计算右边偏移量
    var indexRight = currentPgae + 2 - pageTotal;
    if (pageTotal > maxShow) {
        for (var i = 0; i < maxShow; i++) {
            var pageNumber = currentPgae - 2 + i;
            if (indexLeft > 0) {
                pageNumber += indexLeft;
            }
            if (indexRight > 0) {
                pageNumber -= indexRight;
            }
            if (pageNumber == currentPgae) {
                pageHtml += "<li class='active' id=pagination-" + pageNumber + "><a href='javascript:;'>" + pageNumber + "</a></li >";
            } else {
                pageHtml += "<li id=pagination-" + pageNumber + "><a href='javascript:;'>" + pageNumber + "</a></li >";
            }
            idArray.push(pageNumber);

        }
    }
    else {
        for (var i = 0; i < pageTotal; i++) {
            var pageNumber = i + 1;
            if (pageNumber == currentPgae) {
                pageHtml += "<li class='active' id=pagination-" + pageNumber + "><a href='javascript:;'>" + pageNumber + "</a></li >";
            } else {
                pageHtml += "<li id=pagination-" + pageNumber + "><a href='javascript:;'>" + pageNumber + "</a></li >";
            }
            idArray.push(pageNumber);

        }
    }
    if (indexRight < 0) {
        pageHtml += "<li><a href='javascript:;'>...</a></li >";
    }
    pageHtml += "<li id='pagination-next'><a href='javascript:;'>下一页</a></li>" +
        "<li id='pagination-last'><a href='javascript:;'>尾页</a></li>" +
        "</ul>";
    pageHtml += " <ul class='pagination'><li><span>前往&nbsp;&nbsp;<input type='text' id='pagination-to' style='width:40px;height:20px;color:black' />&nbsp;&nbsp;页</span></li></ul>";

    return pageHtml;
}


/**
 * 注册事件
 */
function clickRegister(idArray,callback) {
    $.each(idArray, function (index, value) {
        $('#pagination-' + value).on('click', function () {
            // 首页末尾时候包含这个值 >-1时表示包含。否则不包含
            var containsIndex = $.inArray(value, finalIdArray);
            if (containsIndex > -1) {
                var paginationOp = finalIdArray[containsIndex];
                var currentPage = params.currentPage;
                // 点击上一个
                if (paginationOp == 'previous') {
                    if (currentPage > 1) {
                        params.currentPage = currentPage - 1;
                        paginationInit(params,callback);
                        callback && callback(params);
                    }
                }
                // 点击下一个
                if (paginationOp == 'next') {
                    if (currentPage < params.pageTotal) {
                        params.currentPage = currentPage + 1;
                        paginationInit(params,callback);
                        callback && callback(params);
                    }
                }
                // 点击首个
                if (paginationOp == 'first') {
                    params.currentPage = 1;
                    paginationInit(params,callback);
                    callback && callback(params);
                }
                // 点击末尾
                if (paginationOp == 'last') {
                    params.currentPage = params.pageTotal;
                    paginationInit(params,callback);
                    callback && callback(params);
                }
            } else {
                params.currentPage = value;
                paginationInit(params,callback);
                callback && callback(params);
            }
        })
    })
    // 跳转的回车事件
    $('#pagination-to').bind('keypress', function (event) {
        if (event.keyCode == 13) {
            //执行操作
            var val = $("#pagination-to").val();
            if (val > params.pageTotal) {
                params.currentPage = params.pageTotal;
                paginationInit(params,callback);
                $("#pagination-to").val(params.currentPage);
                callback && callback(params);
            } else if (val >= 1 && val <= params.pageTotal) {
                params.currentPage = parseInt(val);
                paginationInit(params,callback);
                $("#pagination-to").val(params.currentPage);
                callback && callback(params);
            } else {
                params.currentPage = 1;
                paginationInit(params,callback);
                $("#pagination-to").val(params.currentPage);
                callback && callback(params);
            }
        }
    })
}
